rendernode: Don't alloca() 8MB
authorBenjamin Otte <otte@redhat.com>
Sat, 3 Feb 2018 15:05:01 +0000 (16:05 +0100)
committerBenjamin Otte <otte@redhat.com>
Sat, 3 Feb 2018 15:24:13 +0000 (16:24 +0100)
This happens when deserializing testcases and it really confuses
valgrind into thinking we're longjmp()ing.

And deserializing rendernodes is slow anyway, so who cares about a few
more malloc()s.

gsk/gskrendernodeimpl.c

index 39982887a9f89b4e146a26d90088f503847f3f6c..c0b5358ae9917b37718ea82b8acd332ba134e59a 100644 (file)
@@ -2055,13 +2055,14 @@ gsk_container_node_deserialize (GVariant  *variant,
   gsize i, n_children;
   guint32 child_type;
   GVariant *child_variant;
+  GskRenderNode **children;
 
   if (!check_variant_type (variant, GSK_CONTAINER_NODE_VARIANT_TYPE, error))
     return NULL;
 
   i = 0;
   n_children = g_variant_iter_init (&iter, variant);
-  GskRenderNode **children = g_newa (GskRenderNode *, n_children);
+  children = g_new (GskRenderNode *, n_children);
 
   while (g_variant_iter_loop (&iter, "(uv)", &child_type, &child_variant))
     {
@@ -2071,6 +2072,7 @@ gsk_container_node_deserialize (GVariant  *variant,
           guint j;
           for (j = 0; j < i; j++)
             gsk_render_node_unref (children[j]);
+          g_free (children);
           g_variant_unref (child_variant);
           return NULL;
         }
@@ -2081,6 +2083,7 @@ gsk_container_node_deserialize (GVariant  *variant,
 
   for (i = 0; i < n_children; i++)
     gsk_render_node_unref (children[i]);
+  g_free (children);
 
   return result;
 }